﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using extremeEvents.Data;

namespace extremeEvents
{
    public partial class ListaUtilizadores : UserControl
    {
        public ListaUtilizadores()
        {
            InitializeComponent();
        }

        /// <summary>
        /// Função chamada após formulário ser carregado
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void UtilizadoresForm_Paint(object sender, PaintEventArgs e)
        {

            try
            {
                //desactivar a geração das colunas de forma automática
                utilizadoresdataGridView.AutoGenerateColumns = false;

                using (var utilizadorDB = new extremeEventsEntities())
                {
                    //obter lista de utilizadores
                    List<aspnet_Users> aspnet_User = utilizadorDB.aspnet_Users.ToList();
                    List<utilizadorLinha> rows = new List<utilizadorLinha>();

                    //percorrer todos os utilizadores
                    //para definir as linhas da tabela
                    for (int i = 0; i < aspnet_User.Count; i++)
                        rows.Add(new utilizadorLinha
                            {
                                UserId = aspnet_User[i].UserId,
                                numero_linha = i + 1,
                                UserName = aspnet_User[i].UserName,
                                nome = aspnet_User[i].utilizador.primeiro_nome + " " + aspnet_User[i].utilizador.ultimo_nome,
                                estado = !aspnet_User[i].aspnet_Membership.IsLockedOut,
                                email = aspnet_User[i].aspnet_Membership.Email,
                                nif = aspnet_User[i].utilizador.nif,
                                editar = "editar"
                            }
                        );
                    //definir tabela
                    utilizadoresdataGridView.DataSource = rows;
                }

            }
            catch (Exception exp) {
                Console.WriteLine(exp.Message);
            }

        }

        /// <summary>
        /// Função chamada após o utilizador clicar numa celula
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void utilizadoresdataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            //verifica se nao foi clicado no header
            if (e.RowIndex != -1)
            {
                //obter o nome da coluna seleccionada
                var nome_columna = utilizadoresdataGridView.Columns[e.ColumnIndex].Name;

                //verifica se foi seleccionado a columna "estado"
                if (nome_columna == "estado")
                {
                    //obter o estado do utilizador
                    bool estado = (bool)utilizadoresdataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;

                    if (MessageBox.Show("Deseja " + (estado ? "desactivar" : "activar") + " a conta do utilizador \"" + utilizadoresdataGridView.Rows[e.RowIndex].Cells["nome"].Value + "\"?", "Alterar estado da conta", MessageBoxButtons.YesNo) == DialogResult.Yes)
                    {
                        //alterar o estado na tabela
                        utilizadoresdataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = !estado;

                        //alterar o estado na base de dados
                        DLGenerica.Instance.alterarEstadoUtilizador((Guid)utilizadoresdataGridView.Rows[e.RowIndex].Cells["UserId"].Value, estado);

                    }
                }
                //verifica se foi seleccionado a columna "editar"
                else if (nome_columna == "editar")
                {

                    //guardar referencia do utilizador seleccionado no navegador
                    var gu = (Guid)utilizadoresdataGridView.Rows[e.RowIndex].Cells["UserId"].Value;
                    Navegador.Instance.utilizador_selecionado = gu;

                    //ir para o menu de edição de um utilizador
                    Navegador.Instance.irPara("editarUtilizadorPage");
                    //obter label "titulo"
                    var label = (Label)Navegador.Instance.main.Controls.Find("titleLabel", true)[0];
                    //mostrar o nome do utilizador a ser editado
                    label.Text = label.Text + " | " + utilizadoresdataGridView.Rows[e.RowIndex].Cells["nome"].Value + " (" + utilizadoresdataGridView.Rows[e.RowIndex].Cells["UserName"].Value + ")";

                }

            }
        }

        /// <summary>
        /// Objecto utilizado para alimenter a tabela de utilizadores
        /// </summary>
        class utilizadorLinha
        {
            public Guid UserId { get; set; }
            public string UserName { get; set; }
            public int numero_linha { get; set; }
            public bool estado { get; set; }
            public string nome { get; set; }
            public string email { get; set; }
            public string nif { get; set; }
            public string editar { get; set; }
        }
    }
}
